<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Pro Git - 简体中文版
</title>
    <meta content="http://www.w3.org/1999/xhtml; charset=utf-8" http-equiv="Content-Type"/>
    <link href="stylesheet.css" type="text/css" rel="stylesheet"/>
    <style type="text/css">
		@page { margin-bottom: 5.000000pt; margin-top: 5.000000pt; }</style>
  </head>
  <body class="calibre">
<h2 id="calibre_toc_17" class="calibre3">取得项目的 Git 仓库</h2>

<p class="calibre2">有两种取得 Git 项目仓库的方法。第一种是在现存的目录下，通过导入所有文件来创建新的 Git 仓库。第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。</p>

<h3 id="calibre_toc_86" class="calibre4">从当前目录初始化</h3>

<p class="calibre2">要对现有的某个项目开始用 Git 管理，只需到此项目所在的目录，执行：</p>

<pre class="calibre8"><code class="calibre9">$ git init
</code></pre>

<p class="calibre2">初始化后，在当前目录下会出现一个名为 .git 的目录，所有 Git 需要的数据和资源都存放在这个目录中。不过目前，仅仅是按照既有的结构框架初始化好了里边所有的文件和目录，但我们还没有开始跟踪管理项目中的任何一个文件。（在第九章我们会详细说明刚才创建的 <code class="calibre9">.git</code> 目录中究竟有哪些文件，以及都起些什么作用。）</p>

<p class="calibre2">如果当前目录下有几个文件想要纳入版本控制，需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪，然后提交：</p>

<pre class="calibre8"><code class="calibre9">$ git add *.c
$ git add README
$ git commit -m 'initial project version'
</code></pre>

<p class="calibre2">稍后我们再逐一解释每条命令的意思。不过现在，你已经得到了一个实际维护着若干文件的 Git 仓库。</p>

<h3 id="calibre_toc_87" class="calibre4">从现有仓库克隆</h3>

<p class="calibre2">如果想对某个开源项目出一份力，可以先把该项目的 Git 仓库复制一份出来，这就需要用到 git clone 命令。如果你熟悉其他的 VCS 比如 Subversion，你可能已经注意到这里使用的是 clone 而不是 checkout。这是个非常重要的差别，Git 收取的是项目历史的所有数据（每一个文件的每一个版本），服务器上有的数据克隆之后本地也都有了。实际上，即便服务器的磁盘发生故障，用任何一个克隆出来的客户端都可以重建服务器上的仓库，回到当初克隆时的状态（可能会丢失某些服务器端的挂钩设置，但所有版本的数据仍旧还在，有关细节请参考第四章）。</p>

<p class="calibre2">克隆仓库的命令格式为 <code class="calibre9">git clone [url]</code>。比如，要克隆 Ruby 语言的 Git 代码仓库 Grit，可以用下面的命令：</p>

<pre class="calibre8"><code class="calibre9">$ git clone git://github.com/schacon/grit.git
</code></pre>

<p class="calibre2">这会在当前目录下创建一个名为 “grit” 的目录，其中内含一个 <code class="calibre9">.git</code> 的目录，并从同步后的仓库中拉出所有的数据，取出最新版本的文件拷贝。如果进入这个新建的 <code class="calibre9">grit</code> 目录，你会看到项目中的所有文件已经在里边了，准备好后续的开发和使用。如果希望在克隆的时候，自己定义要新建的项目目录名称，可以在上面的命令最后指定：</p>

<pre class="calibre8"><code class="calibre9">$ git clone git://github.com/schacon/grit.git mygrit
</code></pre>

<p class="calibre2">唯一的差别就是，现在新建的目录成了 mygrit，其他的都和上边的一样。</p>

<p class="calibre2">Git 支持许多数据传输协议。之前的例子使用的是 <code class="calibre9">git://</code> 协议，不过你也可以用 <code class="calibre9">http(s)://</code> 或者 <code class="calibre9">user@server:/path.git</code> 表示的 SSH 传输协议。我们会在第四章详细介绍所有这些协议在服务器端该如何配置使用，以及各种方式之间的利弊。</p>

</body>
</html>
